package consultas;

import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;

import equipos.Equipo;

/**
 * TODO: description
 */
public class ParesDeEquipos {
    public void CantidadDeEmpates(final Session s, final Equipo e1, final Equipo e2, final Map<String, Integer> map) {
        HistorialVictorias historial = new HistorialVictorias();
        historial.victoriasEntreEquipos(s, e1, e2);

        int empates = historial.getEmpates();

        String equipos = e1.getNombre() + " vs. " + e2.getNombre();
        map.put(equipos, empates);
    }

    public Map<String, Integer> paresEquiposEmpates(final Session session, final List<Equipo> equipos) {

        Map<String, Integer> map = new Hashtable<String, Integer>();

        while (!equipos.isEmpty()) {
            Equipo equipoActual = equipos.remove(0);

            for (Equipo e : equipos) {
                this.CantidadDeEmpates(session, equipoActual, e, map);
            }
        }
        return map;
    }

    /*
     * -- TODOS LOS EMPATES (SELECT count(*) as empates,f1.equipo_id, f2.equipo_id FROM persistencia.partidos_simples p
     * join persistencia.formaciones f1 on f1.f_id=f1_id join persistencia.formaciones f2 on f2.f_id=f2_id where
     * goles1=goles2 group by f1.equipo_id, f2.equipo_id)
     * 
     * union
     * 
     * (SELECT 0 as empates, f1.equipo_id, f2.equipo_id from persistencia.formaciones f1 join persistencia.formaciones
     * f2 where not f1.equipo_id = f2.equipo_id group by f1.equipo_id, f2.equipo_id)
     */
    public List<?> empates(final Session session) {
        String consulta = "(SELECT count(*) as empates,f1.equipo_id, f2.equipo_id "
                + "FROM persistencia.partidos_simples p " + "join persistencia.formaciones f1 on f1.f_id=f1_id "
                + "join persistencia.formaciones f2 on f2.f_id=f2_id "
                + "where goles1=goles2  group by f1.equipo_id, f2.equipo_id) ";

        Query q = session.createSQLQuery(consulta);

        return q.list();
    }

}
